I2C (also referred to as I2C) is a multi-master serial single-ended bus used for attaching low-speed peripherals to a motherboard, embedded system, cellphone, or other electronic devices. The I2C bus includes a clock line (SCL) and a data line (SDA) with 7-bit addressing. The bus has two roles for nodes: master and slave. A master node is a node that generates the clock and initiates communication with slave nodes. A slave node is a node that receives the clock and responds when addressed by the master. The I2C bus is a multi-master bus, which means any number of master nodes can be present. Additionally, master and slave roles may be switched between messages (after a STOP is sent). I2C defines basic types of messages, each of which begins with a START and ends with a STOP.
In this context of a camera implementation, unidirectional transmissions may be used to capture an image from a sensor and transmit such image data to memory in a baseband processor, while control data may be exchanged between the baseband processor and the sensor as well as other peripheral devices. In one example, a Camera Control Interface (CCI) protocol may be used for such control data between the baseband processor and the image sensor (and/or one or more slave nodes). In one example, the CCI protocol may be implemented over an I2C serial bus between the image sensor and the baseband processor.
Legacy I2C implemented multi-master bus arbitration by allowing multiple master devices to drive or pull a bus line low during a slave identifier (ID) period. Whichever master device drives the bus line low the longest wins control of the bus. Unlike legacy I2C, CCI and CCI extension (CCIe) do not allow more than one CCIe device to drive the bus at any time, so the same bus arbitration method for master devices as I2C is not possible.
Therefore, a way is needed to allow a single-master bus to have multiple masters.